<?php
    header("Content-type: text/html; charset=utf-8");
    require_once('dbconnect.inc.php');
    require_once('auth.inc.php');

    $auth = new auth();

    $auth->setDefRedir($_SERVER['PHP_SELF']);

    $user = $auth->isauth($dbh,$_COOKIE, false);

    if (!$user)
    {
        header($auth->getAuthRedir());  
        $cookie = $auth->getCookie();
        setcookie($cookie['name'], $cookie['value']);
        exit();
    }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=9" />
    <link rel="stylesheet" type="text/css" media="screen" href="css/monitor.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="css/themes/redmond/jquery-ui-1.8.9.custom.css" />

    <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
    <script src="js/i18n/grid.locale-ru.js" type="text/javascript"></script>
    <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
    <script src="js/jquery-ui-1.8.9.custom.min.js" type="text/javascript"></script>
    <script type="text/javascript">

    var uid = <?php echo $user['uid']?>;

    function fz(_data)
    {
        return (_data == null) ? '' : _data;
    }

    function mysqlTimeStampToDate(timestamp) 
    {
            var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
            var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
            return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
    }

    function lz(_val)
    {
        return (parseInt(_val, 10) < 10) ? ( '0'+_val ) : _val;
    }

    function customDateFormat(_date)
    {
        if (_date == null)
        {
            return '';
        }
        else
        {
            var date = mysqlTimeStampToDate(_date);

            return lz(date.getDate())+'.'+lz(date.getMonth()+1)+'.'+date.getFullYear()+' '+
                                              lz(date.getHours())+':'+lz(date.getMinutes())+':'+lz(date.getSeconds());
        }
    }

    function cancel_disp()
    {
        if (!confirm("Отменить диспетчерское управление ?"))
            return 

        var sel_cid = $('input[name=ccid]').val();  

        $.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param=0',
            function(data)
            {
                if (data['error'] != null)
                {
                    alert("Ошибка отмены диспетческого управления: " + data['error']);
                }
                else
                {
                    alert("Диспетчерское управление отменено !");
                }
            });
    }

    function show_detail()
    {
        var sel_cid = $('input[name=ccid]').val();

        if (sel_cid != "")
        {

            $.getJSON('req/con_rule.php?oper=info&cid=' + sel_cid, function(data)
                        {

                            var con_detail = '<div class="c-block">' +
                                                '<div class="c-header">' + 'Контроллер № ' + data.c_id + '</div>' +
                                                '<div class="c-body">' + fz(data.location) + '</div>' +
                                                '<div class="c-body">Последний рескан:&nbsp<b>'+customDateFormat(data.cont_scan_time)+'</b></div>'+
                                                '<div class="c-body">Время контроллера:&nbsp<b>'+customDateFormat(data.cont_local_time)+'</b></div>'+
                                            '</div>'+
                                            '<div class="c-block">' +
                                                '<div class="c-header">Программа</div>' +
                                                '<div class="c-body">Загружена:&nbsp<b>'+customDateFormat(data.prog_load_time)+'</b></div>';

                            if(data.prog_update_time != null)
                            {
                                con_detail += '<div class="c-body">Активирована:&nbsp<b>'+customDateFormat(data.prog_update_time)+'</b></div>';
                            }

                            switch(data.prog_update_status)
                            {
                                case '0':
                                    con_detail += '<div class="c-body">Статус:&nbsp<b>Загружена в базу.</b></div>';
                                break
                                case '1':
                                    con_detail += '<div class="c-body">Статус:&nbsp<span style="color:red"><b>Программа загружается.</b></span></div>';
                                break
                                case '3':
                                    con_detail += '<div class="c-body">Статус:&nbsp<b>Загружена в контроллер.</b></div>';
                                break
                                case '4':
                                    con_detail += '<div class="c-body">Статус:&nbsp<span style="color:red"><b>Ошибка загрузки</b></span></div>';
                                break
                                default:
                                    con_detail += '<div class="c-body">Статус:&nbsp<span style="color:red"><b>Неизвестное соcтояние</b></span></div>';
                                break
                            }
                                                
                            con_detail += '</div>';

                            if (((data.fault != null) && (data.fault != '0')) ||
                                ((data.no_program != null) && (data.no_program > 0)))
                            {
                                var problem_type = "Проблема";

                                switch (data.fault)
                                {
                                    case '1':
                                        problem_type = "Короткое замыкание";
                                    break;
                                    case '2':
                                        problem_type = "Перегрузка";
                                    break;
                                    case '3':
                                        problem_type = "Недогрузка";
                                    break;
                                    case '4':
                                        problem_type = "Перегорел красный";
                                    break;
                                    case '5':
                                        problem_type = "Конфликт зеленых";
                                    break;
                                }

                                con_detail += '<div class="c-block">' +
                                                '<div class="c-header red">Проблемы</div>';

                                if ((data.fault_red != null) && (data.fault_red > 0))
                                {
                                    con_detail +=  '<div class="c-body red">' + problem_type +' направление: ' + data.fault_red +'</div>';
                                }

                                if ((data.fault_yellow != null) && (data.fault_yellow > 0))
                                {
                                    con_detail +=  '<div class="c-body red">' + problem_type +' направление: ' + data.fault_yellow +'</div>';
                                }

                                if ((data.fault_green != null) && (data.fault_green > 0))
                                {
                                    con_detail +=  '<div class="c-body red">' + problem_type +' направление: ' + data.fault_green +'</div>';
                                }

                                if ((data.no_program != null) && (data.no_program > 0))
                                {
                                    con_detail +=  '<div class="c-body red">Нет программы в ОЗУ!</div>';
                                }

                                con_detail += '</div>';
                            }

                            var show_btn = ((data.job_mode != null) && <?php echo $user['rule'] == 0 ? 'false' : 'true'?>); 

                            if (show_btn)
                            {
                                con_detail += '<div class="c-block">' +
                                            '<div class="c-header">Управление</div>'+
                                            '<div class="c-body">'+
                                            '<div id="button-box">'+
                                            '<button id="set-phase">Установить фазу</button>'+
                                            '<button id="set-program">Установить программу</button>'+
                                            '<button id="cancel-disp">Отменить управление</button>'+
                                            '</div>'+
                                            '</div>'+
                                            '</div>';
                            }

                            $('#right-info').html(con_detail);

                            if (show_btn)
                            {
                                $("#set-phase").button().click(function() { $( "#set-phase-form" ).dialog("open"); });
                                $("#set-program").button().click(function() { $( "#set-prog-form" ).dialog("open"); });
                                $("#cancel-disp").button().click(function() { cancel_disp(); });
                            }

                    });
            
        }
    }

    function select_cont()
    {
        var cid = $(this).find('.cid').html();

        $('input[name=ccid]').val(cid);

        $('.controller').removeClass('selected');
        $(this).addClass('selected');

        show_detail();
    }

    function fill_cont_list()
    {
        var gv = $('#group').val();

        if (gv == null)
            return;

        $.getJSON('req/con_rule.php?oper=all&gid=' + gv + '&uid=' + uid, function(data)
                        {
                            if (data['error'] != null)
                                return;

                            var all_cont = '<ul id="cont-list">'

                            $.each(data, function(i, item)
                                {
                                    var st_msg = '';
                                    var wclass = '';
                                    var add_ps = true;

                                    if (item.job_mode == null)
                                    {
                                        st_msg = '<div class="info"><b>Отключен</b></div>';
                                        wclass = "gray";
                                        add_ps = false;
                                    }
                                    else if (item.job_mode == 0)
                                    {
                                        st_msg = '<div class="info">';
                                    }
                                    else if (item.job_mode == 1)
                                    {
                                        st_msg = '<div class="info">Реж: <b>КУ</b> '
                                    }
                                    else if (item.job_mode == 2)
                                    {
                                        st_msg = '<div class="info">Реж: <b>ДР</b> '
                                    }
                                    else if (item.job_mode == 3)
                                    {
                                        st_msg = '<div class="info">Реж: <b>ВПУ</b> '
                                    }
                                    else if (item.job_mode == 4)
                                    {
                                        st_msg = '<div class="info">Реж: <b>ЗУ</b> '
                                    }
                                    else if (item.job_mode == 5)
                                    {
                                        st_msg = '<div class="info">Реж: <b>РУ</b>'
                                    }
                                    else
                                    {
                                        st_msg = '<div class="info"><b>Ошибка!</b></div>'
                                        wclass = "gray";
                                        add_ps = false;
                                    }
                                    
                                    if (add_ps)
                                    {
                                      switch (item.prog_status)
                                      {
                                        case '9':
                                          st_msg += ' Прог: <span style="color:#ffae00"><b>ЖМ</b></span>';
                                          break;
                                        case '10':
                                          st_msg += ' Прог: <b>ОТКЛ</b>';
                                          break;
                                        case '11':
                                          st_msg += ' Прог: <span style="color:red"><b>КК</b></span>';
                                          break;
                                        default:
                                          st_msg += ' Прог: <b>'+item.prog_status +'</b>';
                                          st_msg += ' Фаза: <b>'+item.phase+'</b></div>';
                                          break;
                                      }
                                      
                                    }

                                    var sel_cid = $('input[name=ccid]').val();

                                    if (((item.fault != null) && (item.fault > 0)) ||
                                       ((item.no_program != null) && item.no_program != 0))
                                    {
                                        wclass = "red"
                                    }

                                    if (sel_cid == item.c_id)
                                    {
                                        wclass += " selected";
                                    }

                                    all_cont += '<li id="cont-'+i+'" class="controller ' + wclass + '">'+
                                                    '<div class="cid">' + item.c_id + '</div>'+
                                                    '<div class="location">' + fz(item.location) + '</div>'+
                                                    st_msg+ '</li>';
                                });

                            all_cont += '</ul>'

                            $('#cnt-cont').html(all_cont);
                            $('.controller').click(select_cont);
                        }
        );

    }

    function update_clock()
    {
        var date = new Date();

        $('#clock').html(lz(date.getDate())+'.'+lz(date.getMonth()+1)+'.'+date.getFullYear()+' '+
                                              lz(date.getHours())+':'+lz(date.getMinutes())+':'+lz(date.getSeconds()));
    }

    function fill_events()
    {
        $.getJSON('req/eve_opt.php', function(data)
            {
                var event_list = '<ul id="event-list">';
    
                $.each(data, function(i, item)
                    {
                        event_list += '<li id="event-item"><div id="name">' + item.name + 
                        '</div><button id="act-script-button" e_id="'+item.id +'" e_name="'+item.name +'" >Выполнить</button></li>';
                    });

                event_list += '</ul>';

                $('#event-panel').html(event_list);
                $('#event-panel li#event-item:even').css("background-color", "#CCDEEA");

                $('button[id=act-script-button]').each(function(index,data)
                    {
                        $(data).button().click(function()
                            {
                                if (confirm('Выполнить сценарий: \n"' + $(this).attr('e_name')+'" ?'))
                                {
                                    $.get('req/con_rule.php?oper=event&eid='+$(this).attr('e_id'),

                                        function(data)
                                        {
                                            if (data['error'] != null)
                                            {
                                                alert("Ошибка выполнения сценария !" );
                                            }
                                            else
                                            {
                                                alert("Сценарий выполнен !");
                                            }
                                        });

                                }
                            }
                        );
                    });
            });

    }

    $(function() 
    { 
        $.get('req/grp_opt.php?type=opt&uid=' + uid, 

        function(data)
        {
                $('#group').html('<option value="-1" selected >Все контроллеры</option>\n' + data + "</select>");
                fill_cont_list();
                show_detail();

        });

        $('#group').click(fill_cont_list);

        update_clock();

        setInterval(function()
        {

            fill_cont_list();
            show_detail();
            update_clock();

        }, 5000);

        fill_events();

        $( "#set-phase-form" ).dialog({
            autoOpen: false,
            height: 150,
            width: 500,
            modal: true,
            resizable: false
        });

        $("button[id=set-phase-button]").each(function(index,data)
        {
            $(data).button().click(function() 
                            {
                                var phase = parseInt($(this).attr('phase'), 10) | 0x80;
                                var sel_cid = $('input[name=ccid]').val();

                                $( "#set-phase-form" ).dialog('close');

                                if (phase != null)
                                {
                                    $.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param='+phase,
                                            function(data)
                                            {
                                                if (data['error'] != null)
                                                {
                                                    alert("Ошибка установки фазы: " + data['error']);
                                                }
                                                else
                                                {
                                                    alert("Фаза установлена !");
                                                }
                                            });
                                }
                                else
                                {
                                    alert("Ошибка установки фазы !");
                                }
                            });
        });

        $( "#set-prog-form" ).dialog({
            autoOpen: false,
            height: 250,
            width: 600,
            modal: true,
            resizable: false
        });

        $("button[id=set-prog-button]").each(function(index,data)
        {
            $(data).button().click(function() 
                            {
                                var prog = $(this).attr('prog');
                                var sel_cid = $('input[name=ccid]').val();

                                $( "#set-prog-form" ).dialog('close');

                                if (prog == null)
                                    alert("Ошибка установки программы !");

                                if ((prog >= 1) && (prog <=8))
                                {

                                    $.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=sprog&param='+prog,
                                            function(data)
                                            {
                                                if (data['error'] != null)
                                                {
                                                    alert("Ошибка установки программы: " + data['error']);
                                                }
                                                else
                                                {
                                                    alert("Программа установлена !");
                                                }
                                            });
                                }
                                else if (prog == 9)
                                {
                                    $.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param=143',
                                            function(data)
                                            {
                                                if (data['error'] != null)
                                                {
                                                    alert("Ошибка установки программы: " + data['error']);
                                                }
                                                else
                                                {
                                                    alert("Программа установлена !");
                                                }
                                            });
                                    
                                }
                                else if (prog == 10)
                                {
                                    $.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param=142',
                                            function(data)
                                            {
                                                if (data['error'] != null)
                                                {
                                                    alert("Ошибка установки ЖМ: " + data['error']);
                                                }
                                                else
                                                {
                                                    alert("ЖМ установлено !");
                                                }
                                            });
                                }
                                else
                                {
                                    alert("Неизвестный код ошибки !");
                                }

                            });
                            
        });


        $('#exit-button').button().click(
            function () {
                if (confirm('Выйти из монитора ?'))
                {
                    top.location.href="logout.php";
                }

            }
        );

        $('#admin-button').button().click(function() { top.location.href="cmap.php" });
    });

    </script>
</head>

<body id="monitor-body">

    <div id="set-phase-form" title="Установить фазу">
        <form id="set-phase-form" action="javascript:void(0)">
            <button id="set-phase-button" phase="1">Фаза 1</button>         
            <button id="set-phase-button" phase="2">Фаза 2</button>         
            <button id="set-phase-button" phase="3">Фаза 3</button>         
            <button id="set-phase-button" phase="4">Фаза 4</button>         
            <button id="set-phase-button" phase="5">Фаза 5</button>         
            <button id="set-phase-button" phase="6">Фаза 6</button>         
            <button id="set-phase-button" phase="7">Фаза 7</button>         
            <button id="set-phase-button" phase="8">Фаза 8</button>         
        </form>
    </div>

    <div id="set-prog-form" title="Установить программу">
        <form id="set-prog-form" action="javascript:void(0)">
            <button id="set-prog-button" prog="1">Программа 1</button>          
            <button id="set-prog-button" prog="2">Программа 2</button>          
            <button id="set-prog-button" prog="3">Программа 3</button>          
            <button id="set-prog-button" prog="4">Программа 4</button>          
            <button id="set-prog-button" prog="5">Программа 5</button>          
            <button id="set-prog-button" prog="6">Программа 6</button>          
            <button id="set-prog-button" prog="7">Программа 7</button>          
            <button id="set-prog-button" prog="8">Программа 8</button>
            <button id="set-prog-button" prog="9">Отключить</button>
            <button id="set-prog-button" prog="10">ЖМ</button>
        </form>
    </div>

    <div id="top-menu"> 
        <form id="group-form">
            <label for="group">Группа контроллеров: </label>
            <select id="group">
            </select>

            <input type="hidden" name="ccid" id="ccid" value=''>

        </form>
        <div id="user-info">Оператор: <?php echo $user['name']?></div>
        <div id="top-button-box">
        <?php
            if ($user['type'] == 1)
            {
            ?>
                <button id="admin-button">Администрирование</button>
            <?php
            }
        ?>
            <button id="exit-button">Выход</button>
        </div>

        <div id="clock"></div>
    </div>

    <div id="right-info">

    </div>
    <div id="cnt-cont">
    </div>
    <div id="bottom-info">
        <div id="event-panel">
        </div>  
    </div>
</body>
</html>
